package cn.cloud9.designpattern.dp06facade;

import cn.cloud9.designpattern.dp06facade.facade.FacadePattern;
import cn.cloud9.designpattern.dp06facade.po.GiftInfo;
import cn.cloud9.designpattern.dp06facade.service.LogisticsService;
import cn.cloud9.designpattern.dp06facade.service.PaymentService;
import cn.cloud9.designpattern.dp06facade.service.QualifyService;

/**
 * @projectName: Java
 * @author: 戴知舟
 * @date: 2022年05月24日 10:16
 * @version: 1.0
 */
public class Test {
    public static void main(String[] args) {

        /* 不使用门面模式 */
        QualifyService qualifyService = new QualifyService();
        PaymentService payment = new PaymentService();
        LogisticsService logisticsService = new LogisticsService();

        GiftInfo giftInfo = new GiftInfo();
        giftInfo.setName("礼品1001");

        // 先用库存服务确定是否足够库存
        boolean available = qualifyService.isAvailable(giftInfo);
        if (available) {
            // 如果足够则开始发起支付服务
            boolean isSuccessPay = payment.pay(giftInfo);
            if (isSuccessPay) {
                // 交易成功，开始生成物流订单
                String delivery = logisticsService.delivery(giftInfo);
                System.out.println(delivery);

                // 业务流程结束
                // return;
            }
        }


        /* 使用门面模式  */
        FacadePattern facadePattern = new FacadePattern();
        facadePattern.exchange(giftInfo);
        /**
         * 门面模式就是静态代理模式，重点是对于行为的封装
         * 代理模式的重点是为了对行为的增强
         *
         * 所以，不增强的静态代理就是门面模式
         * 代理模式 -> 结构
         * 委派模式 -> 行为
         *
         *
         */

    }
}
